package com.bobo.utis;

import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.List;

/**
 * 
 * @ClassName: IOUtil
 * @Description: 流处理工具类
 * @author: charles
 * @date: 2020年12月16日 下午3:26:09
 */
public class IOUtil {

	/**
	 * 功能：批量关闭流。
	 *
	 * @param AutoCloseable... closeables 多个可关闭的对象
	 */
	public static void closings(AutoCloseable... closeables) {

		if (null != closeables && closeables.length > 0) {

			for (AutoCloseable autoCloseable : closeables) {
				try {
					autoCloseable.close();
				} catch (Exception e) {
					e.printStackTrace();
				}
			}

		}

	}
	
	/**
	* 功能：流处理，默认不关闭流
	*
	* @param InputStream inputStream 输入流
	* @param OutputStream outputStream 输出流
	*/
	public static void copy(InputStream inputStream, OutputStream outputStream) throws IOException {
		
	 byte[] b =new byte[1024];
	    int len=0;
		while((len=inputStream.read(b))!=-1) {
			outputStream.write(b, 0, len);
		}
		
	}
	
	/**
	* 功能：读取文本流，也可以将流转成字符串，默认编码为UTF-8
	*
	* @param InputStream inputStream 输入流
	* @param boolean isClose 读完后是否关闭流
	*
	* @return 字符串
	*/
	public static String asString(InputStream inputStream, boolean isClose) throws IOException {
		    
		
		  InputStreamReader inputStreamReader = new InputStreamReader(inputStream);
		
		  char [] c =new char[1024];
		  StringBuffer  str= new StringBuffer();
		  int len=0;
		  while((len=inputStreamReader.read(c))!=-1) {
			  str.append( new String(c, 0, len));
		  }
		  if(isClose)
		 closings(inputStream);
			  
		return str.toString();
	}
	
	/**
	* 功能：按行读取文本文件，返回一个List集合，默认编码为UTF-8，默认关闭流
	*
	* @param File textFile 文本文件
	* @param String encode 指定编码
	* @param boolean isClose 处理完成后是否关闭流
	*
	* @return 字符串集合
	*/
	public static List<String> readingLineFormTextFile(File textFile) throws IOException{
		return readingLineFormTextFile(new FileInputStream(textFile));
	}
	
	
	public static List<String> readingLineFormTextFile(InputStream inputstream) throws IOException{
	
		 BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream));
		   
			ArrayList<String> list = new ArrayList<String>();
			String str;
			while((str=reader.readLine())!=null) {
				list.add(str);
			}
			return list;
	
	}

}
